﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GSLMS.Services.Interface;
using GSLMS.Entity;
using GSLMS.Entity.DTO;

namespace GSLMS.Services
{
    public class ManagerService :  IManager
    {

        public List<Manager> GetAll()
        {
            //using (GSLMSCon obj = new GSLMSCon())
            //{
            //    var managers = new List<Manager>();

            //    return managers;
            //}

             var managers = new List<Manager>();

             return managers;
        }

        string GenerateLevlSign(int level)
        {
            string splitSign = "├";
            for (int i = 0; i < level; i++)
            {
                splitSign += "─";
            }
            return splitSign;
        }
        //List<Manager> GetSons(List<Manager> Managers, int? parentID, int level)
        //{
        //    List<Manager> tmpSons = new List<Manager>();
        //    string splitSign = GenerateLevlSign(level);

        //    var tmpManagers = parentID.HasValue ? Managers.Where(c => c.Parent == parentID).ToList() :
        //        Managers.Where(c => !c.Parent.HasValue || c.Parent == 0).ToList();
        //    foreach (var tmpItem in tmpManagers)
        //    {
        //        tmpItem.User = string.Format("{0}{1}", splitSign, tmpItem.User);
        //        tmpSons.Add(tmpItem);
        //        List<Manager> tmpSons2 = new List<Manager>();
        //        tmpSons2 = GetSons(Managers, tmpItem.ID, level + 1).ToList();
        //        tmpSons.AddRange(tmpSons2);
        //    }
        //    return tmpSons;
        //}
        public List<Manager> GetAllByLevel(int? parentID = null, bool isLevel = true)
        {

            return new List<Manager>();
        }
        public List<Manager> GetAll(UniversallySearchParam searchparma)
        {
            //using (GSLMSCon obj = new GSLMSCon())
            //{
            //    return new List<Manager>();
            //}
            return new List<Manager>();
        }

        public Manager GetByID(int id)
        {
            //using (GSLMSCon obj = new GSLMSCon())
            //{
            //    var model = new Manager();

            //    return model;
            //}

            var model = new Manager();

            return model;
        }

        public Manager GetByUser(string user)
        {
            //using (GSLMSCon obj = new GSLMSCon())
            //{
            //    var model = new Manager();

            //    return model;
            //}

            var model = new Manager();

            return model;
        }

        public CurrentUserDTO GetByUserAndRoles(string user)
        {
            //using (GSLMSCon obj = new GSLMSCon())
            //{
            //    CurrentUserDTO userDTO = new CurrentUserDTO();
            //    //var manager = obj.Manager.Where(c => c.User == user).FirstOrDefault();
            //    //if (manager != null)
            //    //{
            //    //    userDTO.CurrentUserInfo = manager;
            //    //    userDTO.UserName = user;
            //    //    userDTO.Roles = this.GetRoles(manager.RoleID.Value);
            //    //    var sonID = obj.ManagerRelation.Where(c => c.ParentID == manager.ID).Select(c => c.ManagerID);
            //    //    userDTO.SubManager = obj.Manager.Where(c => sonID.Contains(c.ID) || c.ID == manager.ID).ToList();
            //    //    userDTO.SubManager = userDTO.SubManager ?? new List<Manager>();
            //    //    userDTO.SubManager = userDTO.SubManager.Where(c => c.ID != manager.ID).ToList();
            //    //}

            //    return userDTO;
            //}

            CurrentUserDTO userDTO = new CurrentUserDTO();
            return userDTO;
        }

        public bool Add(Manager model)
        {
            //try
            //{
            //    using (GSLMSCon obj = new GSLMSCon())
            //    {
            //        //obj.Manager.AddObject(model);
            //        //obj.SaveChanges();
            //        //if (!string.IsNullOrEmpty(model.Parent))
            //        //{
            //        //    bool isAdd = false;
            //        //    foreach (var item in model.Parent.Split(','))
            //        //    {
            //        //        int parentid = 0;
            //        //        if (int.TryParse(item, out parentid))
            //        //        {
            //        //            var rModel = new ManagerRelation()
            //        //            {
            //        //                ManagerID = model.ID,
            //        //                ParentID = parentid,
            //        //                CreateTime = model.CreateTime,
            //        //                Creator = model.Creator
            //        //            };
            //        //            obj.ManagerRelation.AddObject(rModel);
            //        //            isAdd = true;
            //        //        }
            //        //    }
            //        //    if (isAdd)
            //        //    {
            //        //        obj.SaveChanges();
            //        //    }
            //        //}
            //        return true;
            //    }
            //}
            //catch { return false; }
            return true;
        }

        public bool Update(Manager model)
        {
            //try
            //{
            //    using (GSLMSCon obj = new GSLMSCon())
            //    {
            //        //this.Update<Manager>(model);
            //        //string sql = string.Format("Delete from ManagerRelation WHERE ManagerID =({0})", model.ID);
            //        //obj.ExecuteStoreCommand(sql);
            //        //if (!string.IsNullOrEmpty(model.Parent))
            //        //{
            //        //    //Delete<ManagerRelation>(c=>c.ManagerID==model.ID);                       
            //        //    bool isAdd = false;
            //        //    foreach (var item in model.Parent.Split(','))
            //        //    {
            //        //        int parentid = 0;
            //        //        if (int.TryParse(item, out parentid))
            //        //        {
            //        //            var rModel = new ManagerRelation()
            //        //            {
            //        //                ManagerID = model.ID,
            //        //                ParentID = parentid,
            //        //                CreateTime = model.CreateTime,
            //        //                Creator = model.Creator
            //        //            };
            //        //            obj.ManagerRelation.AddObject(rModel);
            //        //            isAdd = true;
            //        //        }
            //        //    }
            //        //    if (isAdd)
            //        //    {
            //        //        obj.SaveChanges();
            //        //    }
            //        //}
            //        return true;
            //    }
            //}
            //catch { return false; }

            return true;
        }

        public bool Delete(int id)
        {
            try
            {
                //this.Delete<Manager>(c => c.ID == id);
                return true;
            }
            catch { return false; }
        }

        public bool IsLogin(string user, string pwd)
        {
            //try
            //{
            //    using (GSLMSCon obj = new GSLMSCon())
            //    {
            //        Manager manager = null;// obj.Manager.Where(c => c.User == user && c.Pwd == pwd && c.Status == 10).SingleOrDefault();
            //        if (manager != null)
            //        { return true; }
            //        else
            //        { return false; }
            //    }

            //}
            //catch { return false; }

            return true;
        }


        private List<VRolePurview> GetRoles(int roleID)
        {
            //using (GSLMSCon obj = new GSLMSCon())
            //{
            //    //return obj.VRolePurview.Where(c => c.RoleID == roleID).ToList();
            //    return new List<VRolePurview>();
            //}
            return new List<VRolePurview>();
        }
    }
}
